package com.wk.arth.od;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 数位dp
 * 二进制不含101的数
 * 1<=L<=R<=10^12
 * [L,R]区间不含101的有多少个
 * @author wukai
 * @date 2023/4/23 10:21
 *  1 10 ==> 8
 *  10 20 ==> 7
 */
public class Shuwei_dp {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int l = sc.nextInt();
        int r = sc.nextInt();
        System.out.println(digitSearch(r)-digitSearch(l-1));
    }

    private static int digitSearch(int num) {
        Integer[] arr = Arrays.stream(Integer.toBinaryString(num).split("")).map(item ->
                Integer.parseInt(item)).toArray(Integer[]::new);
        int[][][] f = new int[arr.length][2][2];
        return dfs(0,true,f,arr,0,0);
    }

    /**
     * 深度优先搜索
     * @param p 树层级 第几位
     * @param limit 是否约束范围
     * @param f 记忆查询
     * @param arr
     * @param pre 前一位
     * @param prepre 前前一位
     * @return
     */
    private static int dfs(int p, boolean limit, int[][][] f, Integer[] arr, int pre, int prepre) {
        if(p == arr.length){
            // 走到最后了，说明不含101，数量加一个
            return 1;
        }
        if(!limit && f[p][pre][prepre]!=0)
            return f[p][pre][prepre];
        int max = limit?arr[p]:1;
        int count = 0;
        for (int i = 0; i <= max; i++) {
            if(i==1&&pre==0&&prepre==1)
                continue;
            count+=dfs(p+1,limit && i==max,f,arr,i,pre);
        }
        if(!limit)
            f[p][pre][prepre] = count;

        return count;
    }
}
